﻿namespace Digitalmes.Domain.Entities.Mes.Processes;

/// <summary>
/// 工艺路线中的流向控制。
/// </summary>
/// <remarks></remarks>
[SugarTable("proc_route_flow_control")]
public sealed class ProcRouteFlowControl : AuditedEntity
{
    /// <summary>
    /// 工艺路线 Id。
    /// </summary>
    public long RouteId { get; set; }

    /// <summary>
    /// 工序 Id。
    /// </summary>
    public long OpId { get; set; }

    /// <summary>
    /// 工序代码
    /// </summary>
    [NotNull]
    public string? OpCode { get; set; }

    /// <summary>
    /// 下一工序，为 null 表示该工序为末序。
    /// </summary>
    public long? NextOpId { get; set; }

    /// <summary>
    /// 下一工序代码。
    /// </summary>
    public string? NextOpCode { get; set; }

    /// <summary>
    /// 是否是关键工序（true->必须；false->忽略）。
    /// </summary>
    /// <remarks>关键工序产品必过，非关键工序产品可以跳站。。</remarks>
    public bool IsCritical { get; set; }

    /// <summary>
    /// 流向控制类型。
    /// </summary>
    public FlowTypeEnum FlowType { get; set; }

    /// <summary>
    /// 标准作业时长(秒)。
    /// </summary>
    public int StdWorkDuration { get; set; }

    /// <summary>
    /// 前置条件，进入该工序前的条件集合。
    /// </summary>
    [NotNull]
    [SugarColumn(IsJson = true)]
    public List<string>? Preconditions { get; set; } = [];

    /// <summary>
    /// 后置条件，离开该工序时的条件集合。
    /// </summary>
    [NotNull]
    [SugarColumn(IsJson = true)]
    public List<string>? Postconditions { get; set; } = [];

    /// <summary>
    /// 维修站点。
    /// </summary>
    /// <remarks>产品在此工序 NG 后，指定应该在哪个工位进行返工处理。</remarks>
    public string? RepairStation { get; set; }
}
